package com.hera.process.config.rest.controller;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hera.base.domain.MensajeJSON;
import com.hera.base.rest.controller.BaseController;
import com.hera.base.util.FiltroDTO;
import com.hera.process.config.service.DynaformFieldService;
import com.hera.process.config.service.DynaformService;
import com.hera.process.config.service.DynaformStageService;
import com.hera.process.config.service.FieldOptionService;
import com.hera.process.config.service.FormFieldService;
import com.hera.process.form.domain.Dynaform;
import com.hera.process.form.domain.DynaformField;
import com.hera.process.form.domain.DynaformStage;
import com.hera.process.form.domain.FieldOption;
import com.hera.process.form.domain.FormField;
import com.hera.process.workflow.domain.Stage;

@Controller
@RequestMapping("form")
public class FormController extends BaseController {

	static final Logger logger = Logger.getLogger(FormController.class);
	
	
	@Autowired
	private DynaformService dynaformservice;
	
	@Autowired
	private DynaformStageService dynaformstageservice;
	
	@Autowired
	private DynaformFieldService dynaformfieldservice;
	
	@Autowired
	private FieldOptionService fieldoptionservice;
	
	@Autowired
	private FormFieldService formfieldservice;
	
	
	
	
	
	
	/*
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////// DYNAFORM SERVICE //////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 */

	
	@RequestMapping(value = "dynaform/list", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON listDynaform(@RequestBody FiltroDTO filtroDTO) {
		logger.info("listDynaform  " + filtroDTO.toString());
		
		return obtenerMensajeJSON(dynaformservice.findAll(filtroDTO));
   }
	
	@RequestMapping(value = "dynaform/save", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON saveDynaform(@RequestBody Dynaform dynaform) {
		logger.info("grabando el parametro....");
		dynaformservice.save(dynaform);
		return obtenerMensajeJSON(dynaform);		
   }
	
	@RequestMapping(value = "dynaform/update", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON updateDynaform(@RequestBody Dynaform dynaform) {
		logger.info("grabando el parametro....");
		dynaformservice.update(dynaform);
		return obtenerMensajeJSON(dynaform);
   }
	
	@RequestMapping(value = "dynaform/delete", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON deleteDynaform(@RequestBody Dynaform dynaform) {
		logger.info("grabando el parametro....");
		dynaformservice.delete(dynaform);
		return obtenerMensajeJSON(dynaform);		
   }
	
	@RequestMapping(value = "dynaform/listgridformprocess", method = RequestMethod.POST)
    @ResponseBody
    public MensajeJSON findGridFormByIdProcess(@RequestBody Dynaform dynaform) {
		logger.info("listado gridform....");
		return obtenerMensajeJSON(dynaformservice.findGridFormByIdProcess(dynaform.getIdProcess()));
    }
	/*
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////// DYNAFORMFIELD SERVICE //////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 */
	
	
	@RequestMapping(value = "dynaformfield/list", method = RequestMethod.POST)
	@ResponseBody
   	public MensajeJSON listDynaformfield(@RequestBody FiltroDTO filtroDTO) {
		logger.info("listDynaformfield  " + filtroDTO.toString());
		
		return obtenerMensajeJSON(dynaformfieldservice.findAll(filtroDTO));
	}
	
	@RequestMapping(value = "dynaformfield/findAllByDynaFormField", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON listByDynaformfield(@RequestBody FiltroDTO filtroDTO) {
		logger.info("listByDynaformfield  " + filtroDTO.toString());
		
		return obtenerMensajeJSON(dynaformfieldservice.findAllByDynaFormField(filtroDTO));
	}
	
	@RequestMapping(value = "dynaformfield/save", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON saveDynaformfield(@RequestBody DynaformField dynaformfield) {
		logger.info("grabando el dynaformfield....");
		dynaformfieldservice.save(dynaformfield);
		return obtenerMensajeJSON(dynaformfield);		
	}
	
	@RequestMapping(value = "dynaformfield/update", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON updateDynaformfield(@RequestBody DynaformField dynaformfield) {
		logger.info("update dynaformfield....");
		dynaformfieldservice.update(dynaformfield);
		return obtenerMensajeJSON(dynaformfield);
	}
	
	@RequestMapping(value = "dynaformfield/updateformfield", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON updateDynaformfieldwithFormfield(@RequestBody DynaformField dynaformfield) {
		logger.info("updateformfield dynaformfield....");
		dynaformfieldservice.updatewithFormfield(dynaformfield);
		return obtenerMensajeJSON(dynaformfield);
	}
	
	@RequestMapping(value = "dynaformfield/delete", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON deleteDynaformfield(@RequestBody DynaformField dynaformfield) {
		logger.info("grabando el parametro....");
		dynaformfieldservice.delete(dynaformfield);
		return obtenerMensajeJSON(dynaformfield);		
	}
	@RequestMapping(value = "dynaformfield/findAllByDynaFormFieldByIdDynaForm", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON listByDynaformfielByIdDynaForm(@RequestBody FiltroDTO filtroDTO) {
		logger.info("listByDynaformfieldByIdDynaForm  " + filtroDTO.toString());

		return obtenerMensajeJSON(dynaformfieldservice
				.findAllByDynaFormFieldByIdDynaForn(filtroDTO));
	}
	/*
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////// DYNA_FORM_STAGE SERVICE //////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 */

	
	@RequestMapping(value = "dynaformstage/list", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON listDynaformStages(@RequestBody FiltroDTO filtroDTO) {
		logger.info("listDynaform  " + filtroDTO.toString());
		
		return obtenerMensajeJSON(dynaformstageservice.findAll(filtroDTO));
   }
	
	@RequestMapping(value = "dynaformstage/save", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON saveDynaformStage(@RequestBody DynaformStage dynaformstage) {
		logger.info("grabando el parametro....");
		dynaformstageservice.save(dynaformstage);
		return obtenerMensajeJSON(dynaformstage);		
   }
	
	@RequestMapping(value = "dynaformstage/update", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON updateDynaformStage(@RequestBody DynaformStage dynaformstage) {
		logger.info("grabando el parametro....");
		dynaformstageservice.update(dynaformstage);
		return obtenerMensajeJSON(dynaformstage);
   }
	
	@RequestMapping(value = "dynaformstage/delete", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON deleteDynaformStage(@RequestBody DynaformStage dynaformstage) {
		logger.info("grabando el parametro....");
		dynaformstageservice.delete(dynaformstage);
		return obtenerMensajeJSON(dynaformstage);		
   }
	
	@RequestMapping(value = "dynaformstagebystage/list", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON listDynaformStagesByStage(@RequestBody Stage stage) {
		logger.info("grabando el parametro....");
		return obtenerMensajeJSON(dynaformstageservice.findByStageIdStage(stage.getIdStage()));
				
	}
	
	/*
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////// FIELDOPTION SERVICE //////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 */

	
	@RequestMapping(value = "fieldoption/list", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON listFieldOptions(@RequestBody FiltroDTO filtroDTO) {
		logger.info("listDynaform  " + filtroDTO.toString());
		
		return obtenerMensajeJSON(fieldoptionservice.findAll(filtroDTO));
	}
	
	@RequestMapping(value = "fieldoption/save", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON saveFieldOption(@RequestBody FieldOption fieldoption) {
		logger.info("grabando el parametro....");
		fieldoptionservice.save(fieldoption);
		return obtenerMensajeJSON(fieldoption);		
	}
	
	@RequestMapping(value = "fieldoption/update", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON updatFieldOption(@RequestBody FieldOption fieldoption) {
		logger.info("grabando el parametro....");
		fieldoptionservice.update(fieldoption);
		return obtenerMensajeJSON(fieldoption);
	}
	
	@RequestMapping(value = "fieldoption/delete", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON deleteFieldOption(@RequestBody FieldOption fieldoption) {
		logger.info("grabando el parametro....");
		fieldoptionservice.delete(fieldoption);
		return obtenerMensajeJSON(fieldoption);		
	}
	
	/*
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////// FORMFIELD SERVICE //////////////////////////////////////////////////////////////////////////////
	 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	 */

	
	@RequestMapping(value = "formfield/list", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON listFormFields(@RequestBody FiltroDTO filtroDTO) {
		logger.info("listDynaform  " + filtroDTO.toString());
		
		return obtenerMensajeJSON(formfieldservice.findAll(filtroDTO));
   }
	
	@RequestMapping(value = "formfield/save", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON saveFormField(@RequestBody FormField formfield) {
		logger.info("grabando el parametro....");
		formfieldservice.save(formfield);
		return obtenerMensajeJSON(formfield);		
   }
	
	@RequestMapping(value = "formfield/update", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON updatFormField(@RequestBody FormField formfield) {
		logger.info("grabando el parametro....");
		formfieldservice.update(formfield);
		return obtenerMensajeJSON(formfield);
   }
	
	@RequestMapping(value = "formfield/delete", method = RequestMethod.POST)
   @ResponseBody
   public MensajeJSON deleteFormField(@RequestBody FormField formfield) {
		logger.info("grabando el parametro....");
		formfieldservice.delete(formfield);
		return obtenerMensajeJSON(formfield);		
   }
	
	@RequestMapping(value = "formDynaformasigno/findAllFormNoasignado", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON listformDynaformNoAsignados(@RequestBody Dynaform dynaform) {
		logger.info("listDynaform  " + dynaform.toString());
		
		return obtenerMensajeJSON(formfieldservice.findAllFormNoasignado(dynaform));
	}
	
	@RequestMapping(value = "formfield/findByIdProcess", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON listByIdProcess(@RequestBody Dynaform dynaform) {
		logger.info("listByIdProcess  " + dynaform.toString());		
		return obtenerMensajeJSON(formfieldservice.findByIdProcess(dynaform.getIdProcess()));
	}
	
	@RequestMapping(value = "formfield/findFormFieldNoAsignado", method = RequestMethod.POST)
	@ResponseBody
	public MensajeJSON listFormFieldNoAsignado(@RequestBody Dynaform dynaform) {
		return obtenerMensajeJSON(formfieldservice.findFormFieldNoAsignado(dynaform.getIdDynaform(), dynaform.getIdProcess()));
	}
	
	
	
	
}
